# Maintainer: Sven-Hendrik Haase <svenstaro@archlinux.org>
pkgbase=nvidia-open
pkgname=(nvidia-open nvidia-open-dkms)
pkgver=545.29.06
pkgrel=1
pkgdesc="NVIDIA open kernel modules"
arch=('loong64' 'x86_64')
url="https://github.com/NVIDIA/open-gpu-kernel-modules"
depends=("nvidia-utils=${pkgver}" 'libglvnd')
makedepends=('linux-headers')
license=('GPL')
options=('!lto' '!buildflags')
source=("$pkgname-$pkgver.tar.gz::https://github.com/NVIDIA/open-gpu-kernel-modules/archive/refs/tags/${pkgver}.tar.gz"
        nvidia-open-gcc-ibt-sls.patch)
sha512sums=('f8df8516d00ee3210b3a844493f74f0337cf50cd88884ff11ba6a1de58384674dc7ab7390f98765ecb805fa792e0b5eee71f7384ddb55a739e4292cad8774302'
            '263c4c5e75ef8cb8ca2641c022dfaf8bd9222fadf68ed15120b0ae7dd9cc901a04ce2e55625d513a0995759c9d82dfbdc4c33d4751159124915d7404b1400e34')

prepare() {
  cd open-gpu-kernel-modules-${pkgver}

  # Fix for https://bugs.archlinux.org/task/74886
  patch -Np1 --no-backup-if-mismatch -i "$srcdir"/nvidia-open-gcc-ibt-sls.patch

  # Attempt to make this reproducible
  sed -i "s/^HOSTNAME.*/HOSTNAME = echo archlinux"/ utils.mk
  sed -i "s/^WHOAMI.*/WHOAMI = echo archlinux-builder"/ utils.mk
  sed -i "s/^DATE.*/DATE = date -r version.mk"/ utils.mk

  sed -i "s/__VERSION_STRING/${pkgver}/" kernel-open/dkms.conf
  sed -i 's/__JOBS/`nproc`/' kernel-open/dkms.conf
  sed -i 's/__EXCLUDE_MODULES//' kernel-open/dkms.conf
  sed -i 's/__DKMS_MODULES//' kernel-open/dkms.conf
  sed -i '$i\
BUILT_MODULE_NAME[0]="nvidia"\
BUILT_MODULE_LOCATION[0]="kernel-open"\
DEST_MODULE_LOCATION[0]="/kernel/drivers/video"\
BUILT_MODULE_NAME[1]="nvidia-uvm"\
BUILT_MODULE_LOCATION[1]="kernel-open"\
DEST_MODULE_LOCATION[1]="/kernel/drivers/video"\
BUILT_MODULE_NAME[2]="nvidia-modeset"\
BUILT_MODULE_LOCATION[2]="kernel-open"\
DEST_MODULE_LOCATION[2]="/kernel/drivers/video"\
BUILT_MODULE_NAME[3]="nvidia-drm"\
BUILT_MODULE_LOCATION[3]="kernel-open"\
DEST_MODULE_LOCATION[3]="/kernel/drivers/video"\
BUILT_MODULE_NAME[4]="nvidia-peermem"\
BUILT_MODULE_LOCATION[4]="kernel-open"\
DEST_MODULE_LOCATION[4]="/kernel/drivers/video"' kernel-open/dkms.conf

  # Clean version for later copying for DKMS
  cp -r ../open-gpu-kernel-modules-${pkgver} "$srcdir"/open-gpu-kernel-modules-dkms
}

build() {
  cd open-gpu-kernel-modules-${pkgver}
  make SYSSRC="/usr/src/linux"
}

package_nvidia-open() {
  depends+=('linux')
  conflicts=('NVIDIA-MODULE')
  provides=('NVIDIA-MODULE')

  cd open-gpu-kernel-modules-${pkgver}
  _extradir="/usr/lib/modules/$(</usr/src/linux/version)/extramodules"
  install -Dt "${pkgdir}${_extradir}" -m644 kernel-open/*.ko
  find "${pkgdir}" -name '*.ko' -exec strip --strip-debug {} +
  find "${pkgdir}" -name '*.ko' -exec xz {} +

  # Force module to load even on unsupported GPUs
  mkdir -p "$pkgdir"/usr/lib/modprobe.d
  echo "options nvidia NVreg_OpenRmEnableUnsupportedGpus=1" > "$pkgdir"/usr/lib/modprobe.d/nvidia-open.conf

  install -Dm644 COPYING "$pkgdir"/usr/share/licenses/$pkgname
}

package_nvidia-open-dkms() {
  depends+=('dkms')
  conflicts=('nvidia-open' 'NVIDIA-MODULE')
  provides=('nvidia-open' 'NVIDIA-MODULE')

  install -dm 755 "${pkgdir}"/usr/src
  # cp -dr --no-preserve='ownership' kernel-open "${pkgdir}/usr/src/nvidia-$pkgver"
  cp -dr --no-preserve='ownership' open-gpu-kernel-modules-dkms "${pkgdir}/usr/src/nvidia-$pkgver"
  mv "${pkgdir}/usr/src/nvidia-$pkgver/kernel-open/dkms.conf" "${pkgdir}/usr/src/nvidia-$pkgver/dkms.conf"

  # Force module to load even on unsupported GPUs
  mkdir -p "$pkgdir"/usr/lib/modprobe.d
  echo "options nvidia NVreg_OpenRmEnableUnsupportedGpus=1" > "$pkgdir"/usr/lib/modprobe.d/nvidia-open.conf

  install -Dm644 open-gpu-kernel-modules-${pkgver}/COPYING "$pkgdir"/usr/share/licenses/$pkgname
}

# vim:set sw=2 et:
